/**
 * Project Name:javaBaseReview
 * Package Name:com.xuwei.base.link
 * author:David
 * Date:2015年6月14日下午4:55:39
 * Copyright (c) 2015, xw123box@126.com All Rights Reserved.
 *
 */
package com.xuwei.base.graph;

import com.xuwei.base.link.Node;
import com.xuwei.ext.exception.OutOfBoundaryException;

/**
 * 基于LinkedList聚集对象的迭代器实现
 * @author David
 * @since 2015年6月14日 下午4:55:39
 * @version 
 * @since JDK 1.6
 */
public class LinkListIterator implements Iterator {
	private LinkList list;//链接表
	private Node current;//当前结点
	
	public LinkListIterator(LinkList list){
		this.list=list;
		if(list.isEmpty()){//若列表为空
			current=null;  //则当前元素置空
		}else{
			current=list.first(); //否则从第一个元素开始
		}
	}
	
	@Override
	public Node first() {
		if(list.isEmpty()){
			current=null;
		}else{
			current=list.first();
		}
		return current;
	}

	@Override
	public Node next() {
		if(isDone()){
			throw new OutOfBoundaryException("错误：已经没有元素了！");
		}
		if(current==list.last()){
			current=null;
		}else{
			current=list.getNext(current);
		}
		return current;
	}

	//检查迭代器中是否还有剩余的元素
	@Override
	public boolean isDone() {
		return current==null;
	}

	//返回当前元素
	@Override
	public Object currentItem() {
		return current().getData();
	}

	public LinkList getList() {
		return list;
	}

	@Override
	public Node current() {
		if(isDone()){
			throw new OutOfBoundaryException("错误：已经没有元素了！");
		}
		return current;
	}

	@Override
	public Node get(int index) {
		Node node = current;
		for(int i=0;i<index;i++){
			next();
			node = current;
		}
		return node;
	}

	@Override
	public Object getItem(int index) {
		return get(index).getData();
	}

}
